'use strict';
const db = uniCloud.database();
const dbCmd = db.command;

/**
 * 云函数：学生注册
 * @param {Object} event - 请求参数
 * @param {string} event.username - 用户名
 * @param {string} event.password - 密码（明文，生产环境需加密）
 * @param {string} event.name - 姓名
 * @param {string} event.student_id - 学号
 * @param {string} event.major - 专业
 * @param {string} event.class_id - 班级
 * @param {string} [event.avatar] - 头像（可选）
 * @param {string} event.role - 角色（student）
 * @returns {Object} - 注册结果
 */
exports.main = async (event, context) => {
  const { username, password, name, student_id, major, class_id, avatar = '', role } = event;

  // 验证必填字段
  if (!username || !password || !name || !student_id || !major || !class_id || !role) {
    return { code: -1, msg: '请输入所有必填信息' };
  }

  if (role !== 'student') {
    return { code: -1, msg: '仅支持学生注册' };
  }

  try {
    const usersCollection = db.collection('users');

    // 检查用户名是否已存在
    const usernameCheck = await usersCollection.where({ username }).get();
    if (usernameCheck.data.length > 0) {
      return { code: -1, msg: '用户名已存在' };
    }

    // 检查学号是否已存在
    const studentIdCheck = await usersCollection.where({ student_id }).get();
    if (studentIdCheck.data.length > 0) {
      return { code: -1, msg: '学号已注册' };
    }

    // 新增用户
    const userData = {
      username,
      password, // 生产环境需加密，如使用 bcrypt
      name,
      student_id,
      major,
      class_id,
      avatar,
      role,
      points: 0, // 初始积分
      created_at: Date.now()
    };

    const res = await usersCollection.add(userData);
    return {
      code: 0,
      data: { user_id: res.id },
      msg: '注册成功'
    };
  } catch (e) {
    console.error('注册失败:', e);
    return { code: -1, msg: `注册失败: ${e.message || '服务器错误'}` };
  }
};